package de.hszg.wjl.datacore;

import static org.junit.Assert.*;

import java.util.List;

import org.junit.Test;

import de.hszg.wjl.datacore.model.Questionnaire;
import de.hszg.wjl.datacore.model.QuestionnaireIdentifier;
import de.hszg.wjl.datacore.model.Statistics;

public class DataProviderTest {

	private DataProvider provider;

	@Test
	public void testGetQuestionnaireIdentifier() {
		List<QuestionnaireIdentifier> identifiers = getDataProvider()
				.getQuestionnaireIdentifier();
		assertTrue(identifiers.size() == 1);
		QuestionnaireIdentifier identifier = identifiers.get(0);
		assertTrue(identifier.getId().equals("1"));
		assertTrue(identifier.getTitle().equals("Sample questionnaire"));

	}

	@Test
	public void testGetQuestionnaire() {

		Questionnaire questionnaire = getDataProvider().getQuestionnaire(
				new QuestionnaireIdentifier("1", "test"));
		assertTrue(questionnaire.getIdentifier().getTitle()
				.equals("Sample questionnaire"));
		assertTrue(questionnaire.getIdentifier().getId().equals("1"));
		assertTrue(questionnaire.getQuestions().size() == 5);

	}

	@Test
	public void testGetStatistics() {
		Statistics statistics = getDataProvider().getStatistics(
				new QuestionnaireIdentifier("1", "test"));
		assertTrue(statistics.getQuestions().size() == 5);
	}

	@Test
	public void testSendQuestionnaire() {
		TestDTStrategy strategy = new TestDTStrategy();
		DataProvider dataProvider = new DataProvider(strategy);
		Questionnaire questionnaire = dataProvider
				.getQuestionnaire(new QuestionnaireIdentifier("1", "test"));
		dataProvider.sendQuestionnaire(questionnaire);
		assertTrue(strategy.getData().length > 0);
	}

	private DataProvider getDataProvider() {
		if (provider == null) {
			TestDTStrategy strategy = new TestDTStrategy();
			provider = new DataProvider(strategy);
		}
		return provider;
	}

}
